using System;
using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using NEX_Datos;
using System.Text;

namespace NEXServicio
{
    public class ServicioTag : ServicioPadre
    {
        #region Contantes

        public const String DataTableName = "Tag";

        #endregion

        #region Metodos privados
        private static DataSet ListarPrivado(string nombre)
        {
            DataSet ds = new DataSet();
            ds.Locale = System.Globalization.CultureInfo.CurrentCulture;
            using (MySqlCommand cmd = UtilidadAD.CreateSqlCommand())
            {
                cmd.CommandText = "TagTraer";

                SetearConNulo("p_descripcion", cmd, MySqlDbType.VarChar, nombre);
                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                }
            }
            ds.Tables[0].TableName = ServicioTag.DataTableName;
            return ds;
        }

        private static DataSet ListarPorLibroPrivado(Int32 idLibro)
        {
            DataSet ds = new DataSet();
            ds.Locale = System.Globalization.CultureInfo.CurrentCulture;
            using (MySqlCommand cmd = UtilidadAD.CreateSqlCommand())
            {
                cmd.CommandText = "LibroTagTraer";
                SetearConNulo("p_idLibro", cmd, MySqlDbType.Int32, idLibro);
                using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
                {
                    da.Fill(ds);
                }
            }
            ds.Tables[0].TableName = ServicioTag.DataTableName;
            return ds;
        }

        #endregion

        #region Metodos publicos
        public static DataSet Listar(string nombre)
        {
            return ServicioTag.ListarPrivado(nombre);
        }
        public static DataSet ListarPorLibro(Int32 idLibro)
        {
            return ServicioTag.ListarPorLibroPrivado(idLibro);
        }
        #endregion

        #region Metodos para Salvar

        public static int Salvar(Transaccion transaccion, int idTag, string descripcion)
        {
            if (transaccion == null)
            {
                throw new ArgumentNullException("transaccion");
            }
            using (MySqlCommand cmd = transaccion.SqlCommandObtener())
            {
                cmd.CommandText = "TagSalvar";

                cmd.Parameters.Add("p_idTag", MySqlDbType.Int32).Value = idTag;
                cmd.Parameters["p_idTag"].Direction = ParameterDirection.InputOutput;
                cmd.Parameters.Add("p_descripcion", MySqlDbType.VarChar).Value = descripcion;

                cmd.ExecuteNonQuery();
                return (Int32)cmd.Parameters["p_idTag"].Value;
            }
        }

        public static void SalvarTagLibro(Transaccion transaccion, int idLibro, String valores)
        {
            if (transaccion == null)
            {
                throw new ArgumentNullException("transaccion");
            }
            using (MySqlCommand cmd = transaccion.SqlCommandObtener())
            {
                cmd.CommandText = "LibroTagSalvar";
                cmd.Parameters.Add("p_idLibro", MySqlDbType.Int32).Value = idLibro;
                cmd.Parameters.Add("p_valores", MySqlDbType.VarChar).Value = valores;
                cmd.ExecuteNonQuery();
            }
        }
        #endregion
    }
}
